package cn.wolfcode.exception;

import cn.wolfcode.qo.MyAJAX;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@ControllerAdvice
public class MyExceptionAdvice {
    //当程序发生非Exception异常(代码问题)的时候来到这个方法进行处理
    @ExceptionHandler(Exception.class)
    public String HandleException( Exception e, HandlerMethod method , HttpServletResponse resp){
        //判断这个异常是不是AJAX的异常
        e.printStackTrace();
        if (method.hasMethodAnnotation(ResponseBody.class)){
            try {
                //返回过去页面的一个JSON字符串 页面不能识别是AJAX所以要设置头文件

                resp.setHeader("Content-Type","application/json;charset=UTF-8");
                //AJAX不能直接返回,所以用响应头返回
                resp.getWriter().println(JSON.toJSONString(new MyAJAX("系统异常,请骚后再试",false)));
                return null ;
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
        return "/common/error";
        }
    //人为异常(密码错误,用户不存在等等)来到这个方法进行处理
    @ResponseBody
    @ExceptionHandler(logicException.class)
    public  MyAJAX logicException(Exception e) {
        return new MyAJAX(e.getMessage(),false);
    }
}
